#ifndef __DATA_TABLE_IMP__
#define __DATA_TABLE_IMP__

#include "DataManagerIf.h"
#include <hash_map>

//
//	Data Manager that use id only
//
class TDATA_API  DataManagerImp : public IDataManager
{
public:
	DataManagerImp();
	virtual ~DataManagerImp();


	//	
	//	IData
	//
	virtual bool		set(IData* pData) ;
	virtual IData*		get(const int& nID, const int& nGrpID )const;


	//
	//	Table Size
	//
	virtual int			size()const ;

	//
	//	Iterator
	virtual bool forEach(IDataVisitor& v);
private:
	typedef	stdext::hash_map<int, IData*>	DataMap;

	DataMap		m_theDataM;
};



//
//	Data Manger the use both group id and id
//
class TDATA_API  DataManagerImpG : public IDataManager
{
public:
	DataManagerImpG();
	virtual ~DataManagerImpG();


	//	
	//	IData
	//
	virtual bool		set(IData* pData) ;
	virtual IData*		get(const int& nID, const int& nGrpID )const;


	//
	//	Table Size
	//
	virtual int			size()const ;

	//
	//	Iterator
	virtual bool forEach(IDataVisitor& v);
private:
	typedef	stdext::hash_map<__int64, IData*>	DataMap;

	DataMap		m_theDataM;
};

#endif

